package tirateima.controlador;

import java.util.Stack;

import tirateima.gui.Principal;


/**
 * Comando utilizado para definir a divisão das telas a partir do roteiro
 * 
 * @author fernando
 */
public class CommandHorizontalDivision extends Command {
	
	//Proporção referente ao painel do console
	private Float console_proportion;
	//Proporção referente ao painel do gerenciador de arquivos
	private Float ga_proportion;
	//Proporção referente ao painel de funcoes ou procedimentos
	private Float function_proportion;
	//Proporção referente ao painel do mostrador
	private Float mostrador_proportion;
	
	Stack<Float[]> valores_antigos = new Stack<Float[]>();
	
	public CommandHorizontalDivision(String console_prop, String ga_prop, String function_prop, String mostrador_prop){
		this.console_proportion = Float.valueOf(console_prop);
		this.ga_proportion = Float.valueOf(ga_prop);
		this.function_proportion = Float.valueOf(function_prop);
		this.mostrador_proportion = Float.valueOf(mostrador_prop);
	}
	
	@Override
	public void execute(Controlador c) throws TiraTeimaLanguageException {
		if ((console_proportion + ga_proportion + function_proportion + mostrador_proportion) == 1.0f) {
			
			Float p1 = 1.0f - console_proportion;
			Float p2 = 1.0f - ((ga_proportion)/p1);
			Float p3 = (1-console_proportion-ga_proportion-function_proportion) / (1 - console_proportion - ga_proportion);
			
			Float[] valores = new Float[]{c.horizontalDivision[0], c.horizontalDivision[1], c.horizontalDivision[2]};
			valores_antigos.push(valores);
			
			Principal principal = Principal.getInstance();
			principal.setDesenhoTabProportion(p1);
			principal.setMostradorTabProportion(p2);
			c.mostrador.setVarsTabProportion(p3);
			principal.setHorizontalDivisionFloat();
		}
	}
	
	@Override
	public void revert(Controlador c) throws TiraTeimaLanguageException,
			ExecutionException {
		
		Float[] valores = valores_antigos.pop();
		Principal principal = Principal.getInstance();
		principal.setDesenhoTabProportion(valores[0]);
		principal.setMostradorTabProportion(valores[1]);
		c.mostrador.setVarsTabProportion(valores[2]);
		principal.setHorizontalDivision();
		
	}

}
